import { _decorator, Component, EditBox, director, find } from 'cc'; // 修改导入 EditBox 和 director
import { hall } from './hall'; // 导入 hall 类
const { ccclass, property } = _decorator;


@ccclass('login')
export class login extends Component {
    private socket: WebSocket; // 声明 WebSocket 变量
    @property(EditBox) // 绑定账号输入框控件
    usernameInput: EditBox = null; // 声明账号输入框变量

    @property(EditBox) // 绑定密码输入框控件
    passwordInput: EditBox = null; // 声明密码输入框变量

    private randomId: number; // 新增属性：用于保存随机ID

    start() {
        this.preloadHallScene(); // 预加载 hall 场景
        this.connectToServer(); // 启动时连接到服务器
    }

    // 预加载 hall 场景
    preloadHallScene() {
        director.preloadScene('hall', () => {
            console.log('hall 场景预加载完成'); // 输出预加载完成信息
        });
    }

    // 用户点击登录按钮时调用
    onLoginButtonClick() {
        const username = this.usernameInput.string; // 获取账号输入框内容
        const password = this.passwordInput.string; // 获取密码输入框内容
        console.log('账号:', username); // 打印账号
        console.log('密码:', password); // 打印密码

        // 检查 WebSocket 连接状态
        if (this.socket.readyState === WebSocket.OPEN) {
            const credentials = JSON.stringify({ 
                type: 'login', // 消息类型，方便服务器判断消息类型
                user: username, 
                pass: password 
            }); // 将账号和密码组合成 JSON 格式
            this.socket.send(credentials); // 发送 JSON 数据到服务器
        } else {
            console.error('WebSocket 连接未打开，无法发送消息'); // 输出错误信息
        }
    }

    // 连接到 WebSocket 服务器
    connectToServer() {
        this.socket = new WebSocket('ws://localhost:3000'); // 创建 WebSocket 连接

        // 处理连接打开事件
        this.socket.onopen = () => {
            console.log('连接成功'); // 输出连接成功信息
            this.socket.send('Hello Server!'); // 向服务器发送消息
        };

        // 处理接收到消息事件
        this.socket.onmessage = (event) => {
            console.log('返回的消息:', event.data); // 打印接收到的消息
            const response = JSON.parse(event.data); // 解析返回的 JSON 数据
            if (response.type === 'login_success') { // 判断消息类型是否为登录成功
                console.log('接收到的随机ID:', response.id); // 输出接收到的随机ID到控制台
                this.randomId = response.id; // 保存随机ID
                const randomName = response.name; // 保存随机名称
                const announcement = response.announcement; // 获取公告内容
                this.enterHall(randomName, announcement); // 传递公告内容
            }
        };

        // 处理连接关闭事件
        this.socket.onclose = () => {
            console.log('断开连接'); // 输出断开连接信息
        };
    }

    update(deltaTime: number) {
        // 可以在这里添加更新逻辑
    }

    // 进入下一个场景 hall
    enterHall(randomName: string, announcement: string) { // 添加 announcement 参数
        console.log('登录成功，进入 hall 场景');
        director.loadScene('hall', () => {
            const hallComponent = find('Canvas').getComponent(hall);
            if (hallComponent) {
                hallComponent.setRandomId(this.randomId, randomName);
                hallComponent.setAnnouncement(announcement); // 设置公告内容
            }
        });
    }
}


